cmake_minimum_required(VERSION 3.27)
project(SQL_PC_DEMO)

set(TARGETS "SQL_DEMO")
# 自定义数据库动态库最低版本要求
set(MIN_VERSION "1.0.3")

#判断架构
set(USE_ARM OFF CACHE BOOL "ON use arm OFF use PC")
#FRAME存在且不为空
if(DEFINED FRAME AND NOT "${FRAME}" STREQUAL "")
	#FRAME存在且不为空
	if("${FRAME}" STREQUAL "arm")
		set(USE_ARM ON)
		message(STATUS "目标架构: ARM")
	else()
		set(USE_ARM OFF)
		message(STATUS "目标架构: PC")
	endif()
else()
	set(USE_ARM OFF)
	message(STATUS "目标架构: PC")
endif()

if(USE_ARM)
	#指定交叉编译环境
	set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
endif()

#头文件路径
include_directories(
	.
	${PROJECT_SOURCE_DIR}/lib/lib_custom_drv_db/include
)

#添加源文件路径
aux_source_directory(. DIR_SRCS)

#添加自定义数据库动态库路径 必须在add_executable之前
link_directories(${PROJECT_SOURCE_DIR}/lib/lib_custom_drv_db/lib)

#############
# 动态库目录
set(LIB_DIR "${PROJECT_SOURCE_DIR}/lib/lib_custom_drv_db/lib")

# 步骤 1：直接查找符合版本要求的动态库文件（例如 libcustom_drv_db.so.1.2.3）
find_library(CUSTOM_DRV_DB_LIB
	NAMES "libcustom_drv_db.so.${MIN_VERSION}"		# 匹配 = MIN_VERSION 的库
	PATHS ${LIB_DIR}
	NO_DEFAULT_PATH
)

# 步骤 2：如果未找到，尝试查找更高版本
if (NOT CUSTOM_DRV_DB_LIB)
	# 列出所有库文件
	file(GLOB LIB_FILES "${LIB_DIR}/libcustom_drv_db.so.*")
	# 遍历所有文件名
	foreach (LIB IN LISTS LIB_FILES)
			# REGEX MATCH 使用正则 从 文件名中 提取版本号（例如 1.2.3）
			string(REGEX MATCH "([0-9]+\\.[0-9]+\\.[0-9]+)$" VERSION_MATCH ${LIB})
			#如果找到CMAKE_MATCH_1存在
			#CMAKE_MATCH_1存在 && 按数值比较版本号 大于 MIN_VERSION
			if (CMAKE_MATCH_1 AND CMAKE_MATCH_1 VERSION_GREATER_EQUAL MIN_VERSION)
				#设置版本号
				set(CUSTOM_DRV_DB_LIB ${LIB})
				break()
			endif ()
	endforeach ()
endif ()

# 步骤 3：验证是否找到符合条件的库
if (CUSTOM_DRV_DB_LIB)
	message(STATUS "找到动态库：${CUSTOM_DRV_DB_LIB}")
else ()
	message(FATAL_ERROR "未找到版本 ${MIN_VERSION} 的动态库！")
endif ()
#############

#添加生成目标
add_executable(
		${TARGETS}	${DIR_SRCS}
)

#添加库
target_link_libraries(
	${TARGETS}	custom_drv_db
)